golang怎么检测变量是否为字符串-世界最资讯

来源:php中文网 | 2023-01-06 13:09:54 |

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

golang检测变量是否为字符串,就是检查变量的类型,下面介绍几种方法。


(相关资料图)

Go提供几种方法检查变量的类型,在字符串格式化标识%T, 反射方式:reflect.TypeOf, reflect.ValueOf.Kind,另外还有使用类型断言,switch case方式。下面通过实例分别介绍这四类方法。

%T 格式化标识

使用%T字符串格式化标识是最简单的检查类型方式。%T是fmt包,可以使用fmt.Printf显示变量类型:

import ("fmt")func main() {var count int = 42var message string = "go find type"var isCheck bool = truevar amount float32 = 10.2fmt.Printf("variable count=%v is of type %T \n", count, count)fmt.Printf("variable message="%v" is of type %T \n", message, message)fmt.Printf("variable isCheck="%v" is of type %T \n", isCheck, isCheck)fmt.Printf("variable amount=%v is of type %T \n", amount, amount)}//OutPutvariable count=42 is of type intvariable message="go find type" is of type stringvariable isCheck="true" is of type boolvariable amount=10.2 is of type float32

使用reflect包函数

如果上述方法没有用,或希望获得类型的更多信息,可以使用reflect包的TypeOf和ValueOf().Kind函数。

reflect.TypeOf()

如果给TypeOf方法传入变量值,则会返回变量类型。当然也可以传递变量,但也支持直接传递变量值,而不是变量,代码如下:

fmt.Printf("%v", reflect.TypeOf(10))//intfmt.Printf("%v", reflect.TypeOf("Go Language"))//string

下面是不同的变量类型的完整示例:

package mainimport ("fmt""reflect")func main() {var days int = 42var typemessage string = "go find type"var isFound bool = falsevar objectValue float32 = 10.2fmt.Printf("variable days=%v is of type %v \n", days, reflect.TypeOf(days))fmt.Printf("variable typemessage="%v" is of type %v \n", typemessage, reflect.TypeOf(typemessage))fmt.Printf("variable isFound="%v" is of type %v \n", isFound, reflect.TypeOf(isFound))fmt.Printf("variable objectValue=%v is of type %v \n", objectValue, reflect.TypeOf(objectValue))}//OUTPUT variable days=42 is of type intvariable typemessage="go find type" is of type stringvariable isCheck="false" is of type boolvariable amount=10.2 is of type float32variable acounts=Savings is of type string

reflect.ValueOf().Kind()

同样使用ValueOf().Kind()也可以获得变量的类型。 reflect.ValueOf()返回基于传入的变量初始化新值,然后进一步通过Kind方法获得变量类型:

package mainimport ("fmt""reflect")func main() {var days int = 42var typemessage string = "go find type"var isFound bool = falsevar objectValue float32 = 10.2fmt.Printf("variable days=%v is of type %v \n", days, reflect.ValueOf(days).Kind())fmt.Printf("variable typemessage="%v" is of type %v \n", typemessage, reflect.ValueOf(typemessage).Kind())fmt.Printf("variable isFound="%v" is of type %v \n", isFound, reflect.ValueOf(isFound).Kind())fmt.Printf("variable objectValue=%v is of type %v \n", objectValue, reflect.ValueOf(objectValue).Kind())}//OUTPUT variable days=42 is of type intvariable typemessage="go find type" is of type stringvariable isCheck="false" is of type boolvariable objectValue=10.2 is of type float32

这种方法的缺点是需要生成新的变量,这可能会增加内存占用。

使用类型断言

本节介绍另一种方法是类型断言。下面写一个方法typeofObject进行类型判断:

func typeofObject(variable interface{}) string {switch variable.(type) {case int:return "int"case float32:return "float32"case bool:return "boolean"case string:return "string"default:return "unknown"}}fmt.Println("Using type assertions")fmt.Println(typeofObject(count))fmt.Println(typeofObject(message))fmt.Println(typeofObject(isCheck))fmt.Println(typeofObject(amount))//OUTPUTUsing type assertionsintstringbooleanfloat64

这种方法的优点是可以对类型进行分组,例如,我们可以将所有int32、int64、uint32、uint64类型标识为“int”。

以上就是golang怎么检测变量是否为字符串的详细内容,更多请关注php中文网其它相关文章!

关键词: go语言 Golang